{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:45:55.515251Z",
     "start_time": "2021-01-04T09:45:51.179308Z"
    },
    "colab": {},
    "colab_type": "code",
    "id": "C__5qIgmawER",
    "outputId": "945e1e48-bd72-4ab3-e820-efbb4984d1da"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Collecting dask-ml\n",
      "  Downloading dask_ml-1.7.0-py3-none-any.whl (141 kB)\n",
      "\u001b[K     |████████████████████████████████| 141 kB 1.9 MB/s eta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: dask[array,dataframe]>=2.4.0 in /home/avinash/anaconda3/lib/python3.8/site-packages (from dask-ml) (2.20.0)\n",
      "Collecting dask-glm>=0.2.0\n",
      "  Downloading dask_glm-0.2.0-py2.py3-none-any.whl (12 kB)\n",
      "Requirement already satisfied: pandas>=0.24.2 in /home/avinash/anaconda3/lib/python3.8/site-packages (from dask-ml) (1.0.5)\n",
      "Requirement already satisfied: numba in /home/avinash/anaconda3/lib/python3.8/site-packages (from dask-ml) (0.50.1)\n",
      "Requirement already satisfied: scipy in /home/avinash/anaconda3/lib/python3.8/site-packages (from dask-ml) (1.5.0)\n",
      "Requirement already satisfied: scikit-learn>=0.23 in /home/avinash/anaconda3/lib/python3.8/site-packages (from dask-ml) (0.23.1)\n",
      "Requirement already satisfied: numpy>=1.17.3 in /home/avinash/anaconda3/lib/python3.8/site-packages (from dask-ml) (1.18.5)\n",
      "Requirement already satisfied: distributed>=2.4.0 in /home/avinash/anaconda3/lib/python3.8/site-packages (from dask-ml) (2.20.0)\n",
      "Requirement already satisfied: packaging in /home/avinash/anaconda3/lib/python3.8/site-packages (from dask-ml) (20.4)\n",
      "Requirement already satisfied: multipledispatch>=0.4.9 in /home/avinash/anaconda3/lib/python3.8/site-packages (from dask-ml) (0.6.0)\n",
      "Requirement already satisfied: pyyaml in /home/avinash/anaconda3/lib/python3.8/site-packages (from dask[array,dataframe]>=2.4.0->dask-ml) (5.3.1)\n",
      "Requirement already satisfied: toolz>=0.8.2; extra == \"array\" in /home/avinash/anaconda3/lib/python3.8/site-packages (from dask[array,dataframe]>=2.4.0->dask-ml) (0.10.0)\n",
      "Requirement already satisfied: fsspec>=0.6.0; extra == \"dataframe\" in /home/avinash/anaconda3/lib/python3.8/site-packages (from dask[array,dataframe]>=2.4.0->dask-ml) (0.7.4)\n",
      "Requirement already satisfied: partd>=0.3.10; extra == \"dataframe\" in /home/avinash/anaconda3/lib/python3.8/site-packages (from dask[array,dataframe]>=2.4.0->dask-ml) (1.1.0)\n",
      "Requirement already satisfied: cloudpickle>=0.2.2 in /home/avinash/anaconda3/lib/python3.8/site-packages (from dask-glm>=0.2.0->dask-ml) (1.5.0)\n",
      "Requirement already satisfied: python-dateutil>=2.6.1 in /home/avinash/anaconda3/lib/python3.8/site-packages (from pandas>=0.24.2->dask-ml) (2.8.1)\n",
      "Requirement already satisfied: pytz>=2017.2 in /home/avinash/anaconda3/lib/python3.8/site-packages (from pandas>=0.24.2->dask-ml) (2020.1)\n",
      "Requirement already satisfied: llvmlite<0.34,>=0.33.0.dev0 in /home/avinash/anaconda3/lib/python3.8/site-packages (from numba->dask-ml) (0.33.0+1.g022ab0f)\n",
      "Requirement already satisfied: setuptools in /home/avinash/anaconda3/lib/python3.8/site-packages (from numba->dask-ml) (49.2.0.post20200714)\n",
      "Requirement already satisfied: threadpoolctl>=2.0.0 in /home/avinash/anaconda3/lib/python3.8/site-packages (from scikit-learn>=0.23->dask-ml) (2.1.0)\n",
      "Requirement already satisfied: joblib>=0.11 in /home/avinash/anaconda3/lib/python3.8/site-packages (from scikit-learn>=0.23->dask-ml) (0.16.0)\n",
      "Requirement already satisfied: msgpack>=0.6.0 in /home/avinash/anaconda3/lib/python3.8/site-packages (from distributed>=2.4.0->dask-ml) (1.0.0)\n",
      "Requirement already satisfied: tornado>=6.0.3; python_version >= \"3.8\" in /home/avinash/anaconda3/lib/python3.8/site-packages (from distributed>=2.4.0->dask-ml) (6.0.4)\n",
      "Requirement already satisfied: sortedcontainers!=2.0.0,!=2.0.1 in /home/avinash/anaconda3/lib/python3.8/site-packages (from distributed>=2.4.0->dask-ml) (2.2.2)\n",
      "Requirement already satisfied: zict>=0.1.3 in /home/avinash/anaconda3/lib/python3.8/site-packages (from distributed>=2.4.0->dask-ml) (2.0.0)\n",
      "Requirement already satisfied: tblib>=1.6.0 in /home/avinash/anaconda3/lib/python3.8/site-packages (from distributed>=2.4.0->dask-ml) (1.6.0)\n",
      "Requirement already satisfied: click>=6.6 in /home/avinash/anaconda3/lib/python3.8/site-packages (from distributed>=2.4.0->dask-ml) (7.1.2)\n",
      "Requirement already satisfied: psutil>=5.0 in /home/avinash/anaconda3/lib/python3.8/site-packages (from distributed>=2.4.0->dask-ml) (5.7.0)\n",
      "Requirement already satisfied: six in /home/avinash/anaconda3/lib/python3.8/site-packages (from packaging->dask-ml) (1.15.0)\n",
      "Requirement already satisfied: pyparsing>=2.0.2 in /home/avinash/anaconda3/lib/python3.8/site-packages (from packaging->dask-ml) (2.4.7)\n",
      "Requirement already satisfied: locket in /home/avinash/anaconda3/lib/python3.8/site-packages (from partd>=0.3.10; extra == \"dataframe\"->dask[array,dataframe]>=2.4.0->dask-ml) (0.2.0)\n",
      "Requirement already satisfied: heapdict in /home/avinash/anaconda3/lib/python3.8/site-packages (from zict>=0.1.3->distributed>=2.4.0->dask-ml) (1.0.1)\n",
      "Installing collected packages: dask-glm, dask-ml\n",
      "Successfully installed dask-glm-0.2.0 dask-ml-1.7.0\n"
     ]
    }
   ],
   "source": [
    "!pip install dask-ml"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: dask in /home/avinash/anaconda3/lib/python3.7/site-packages (2.9.2)\r\n"
     ]
    }
   ],
   "source": [
    "!pip install dask"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "6qeaq3e2awFf",
    "outputId": "2b0dc82e-d614-48b9-ce75-756c73b9aba6"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: dask-ml[xgboost] in /home/avinash/anaconda3/lib/python3.7/site-packages (1.2.0)\n",
      "Requirement already satisfied: dask-glm>=0.2.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[xgboost]) (0.2.0)\n",
      "Collecting distributed>=2.4.0 (from dask-ml[xgboost])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/81/b9/b0a57708039a09966296a16df67098fe00f464cefe7bd4f72981ae8879f6/distributed-2.9.3-py3-none-any.whl (588kB)\n",
      "\u001b[K    100% |████████████████████████████████| 593kB 538kB/s ta 0:00:01\n",
      "\u001b[?25hCollecting scikit-learn>=0.21 (from dask-ml[xgboost])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/73/db/7d8204ddba84ab5d1e4fd1af8f82bbe39c589488bee71e45c662f4144010/scikit_learn-0.22.1-cp37-cp37m-manylinux1_x86_64.whl (7.0MB)\n",
      "\u001b[K    100% |████████████████████████████████| 7.0MB 336kB/s ta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: scipy in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[xgboost]) (1.2.1)\n",
      "Requirement already satisfied: numba in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[xgboost]) (0.43.1)\n",
      "Requirement already satisfied: multipledispatch>=0.4.9 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[xgboost]) (0.6.0)\n",
      "Collecting dask[array,dataframe]>=2.4.0 (from dask-ml[xgboost])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/03/fb/d060d926b4e3af64b687f59f907435a9e8497a6f422c2e4aabcd47df2555/dask-2.9.2-py3-none-any.whl (780kB)\n",
      "\u001b[K    100% |████████████████████████████████| 788kB 438kB/s ta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: pandas>=0.23.4 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[xgboost]) (0.24.2)\n",
      "Requirement already satisfied: packaging in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[xgboost]) (19.0)\n",
      "Collecting numpy>=1.17.3 (from dask-ml[xgboost])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/63/0c/0261693cc3ad8e2b66e66dc2d2676a2cc17d3efb1c58a70db73754320e47/numpy-1.18.1-cp37-cp37m-manylinux1_x86_64.whl (20.1MB)\n",
      "\u001b[K    100% |████████████████████████████████| 20.1MB 194kB/s ta 0:00:01\n",
      "\u001b[?25hCollecting xgboost; extra == \"xgboost\" (from dask-ml[xgboost])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/c1/24/5fe7237b2eca13ee0cfb100bec8c23f4e69ce9df852a64b0493d49dae4e0/xgboost-0.90-py2.py3-none-manylinux1_x86_64.whl (142.8MB)\n",
      "\u001b[K    100% |████████████████████████████████| 142.8MB 365kB/s ta 0:00:011\n",
      "\u001b[?25hCollecting dask-xgboost; extra == \"xgboost\" (from dask-ml[xgboost])\n",
      "  Downloading https://files.pythonhosted.org/packages/1c/bd/d69f0546e7652daa7717aa44ef5346e023e7dd6cc6a50e397872dee27add/dask_xgboost-0.1.9-py2.py3-none-any.whl\n",
      "Requirement already satisfied: cloudpickle>=0.2.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-glm>=0.2.0->dask-ml[xgboost]) (0.8.0)\n",
      "Requirement already satisfied: tornado>=5 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (6.0.2)\n",
      "Requirement already satisfied: tblib in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (1.3.2)\n",
      "Requirement already satisfied: sortedcontainers!=2.0.0,!=2.0.1 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (2.1.0)\n",
      "Requirement already satisfied: msgpack in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (0.6.1)\n",
      "Requirement already satisfied: psutil>=5.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (5.6.1)\n",
      "Requirement already satisfied: toolz>=0.7.4 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (0.9.0)\n",
      "Requirement already satisfied: setuptools in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (40.8.0)\n",
      "Requirement already satisfied: pyyaml in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (5.1)\n",
      "Requirement already satisfied: zict>=0.1.3 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (0.1.4)\n",
      "Requirement already satisfied: click>=6.6 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (7.0)\n",
      "Collecting joblib>=0.11 (from scikit-learn>=0.21->dask-ml[xgboost])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/28/5c/cf6a2b65a321c4a209efcdf64c2689efae2cb62661f8f6f4bb28547cf1bf/joblib-0.14.1-py2.py3-none-any.whl (294kB)\n",
      "\u001b[K    100% |████████████████████████████████| 296kB 1.1MB/s ta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: llvmlite>=0.28.0dev0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from numba->dask-ml[xgboost]) (0.28.0)\n",
      "Requirement already satisfied: six in /home/avinash/anaconda3/lib/python3.7/site-packages (from multipledispatch>=0.4.9->dask-ml[xgboost]) (1.12.0)\n",
      "Requirement already satisfied: partd>=0.3.10; extra == \"dataframe\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask[array,dataframe]>=2.4.0->dask-ml[xgboost]) (0.3.10)\n",
      "Collecting fsspec>=0.6.0; extra == \"dataframe\" (from dask[array,dataframe]>=2.4.0->dask-ml[xgboost])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/dd/1f/7028dacd3c28f34ce48130aae73a88fa5cc27b6b0e494fcf2739f7954d9d/fsspec-0.6.2-py3-none-any.whl (62kB)\n",
      "\u001b[K    100% |████████████████████████████████| 71kB 1.4MB/s ta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: python-dateutil>=2.5.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from pandas>=0.23.4->dask-ml[xgboost]) (2.8.0)\n",
      "Requirement already satisfied: pytz>=2011k in /home/avinash/anaconda3/lib/python3.7/site-packages (from pandas>=0.23.4->dask-ml[xgboost]) (2018.9)\n",
      "Requirement already satisfied: pyparsing>=2.0.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from packaging->dask-ml[xgboost]) (2.3.1)\n",
      "Requirement already satisfied: heapdict in /home/avinash/anaconda3/lib/python3.7/site-packages (from zict>=0.1.3->distributed>=2.4.0->dask-ml[xgboost]) (1.0.0)\n",
      "Requirement already satisfied: locket in /home/avinash/anaconda3/lib/python3.7/site-packages (from partd>=0.3.10; extra == \"dataframe\"->dask[array,dataframe]>=2.4.0->dask-ml[xgboost]) (0.2.0)\n",
      "\u001b[31mtables 3.5.1 requires mock>=2.0, which is not installed.\u001b[0m\n",
      "Installing collected packages: numpy, fsspec, dask, distributed, joblib, scikit-learn, xgboost, dask-xgboost\n",
      "  Found existing installation: numpy 1.16.2\n",
      "    Uninstalling numpy-1.16.2:\n",
      "      Successfully uninstalled numpy-1.16.2\n",
      "  Found existing installation: dask 1.1.4\n",
      "    Uninstalling dask-1.1.4:\n",
      "      Successfully uninstalled dask-1.1.4\n",
      "  Found existing installation: distributed 1.26.0\n",
      "    Uninstalling distributed-1.26.0:\n",
      "      Successfully uninstalled distributed-1.26.0\n",
      "  Found existing installation: scikit-learn 0.20.3\n",
      "    Uninstalling scikit-learn-0.20.3:\n",
      "      Successfully uninstalled scikit-learn-0.20.3\n",
      "Successfully installed dask-2.9.2 dask-xgboost-0.1.9 distributed-2.9.3 fsspec-0.6.2 joblib-0.14.1 numpy-1.18.1 scikit-learn-0.22.1 xgboost-0.90\n",
      "Requirement already satisfied: dask-ml[tensorflow] in /home/avinash/anaconda3/lib/python3.7/site-packages (1.2.0)\n",
      "Requirement already satisfied: numpy>=1.17.3 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (1.18.1)\n",
      "Requirement already satisfied: packaging in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (19.0)\n",
      "Requirement already satisfied: numba in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (0.43.1)\n",
      "Requirement already satisfied: distributed>=2.4.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (2.9.3)\n",
      "Requirement already satisfied: pandas>=0.23.4 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (0.24.2)\n",
      "Requirement already satisfied: scipy in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (1.2.1)\n",
      "Requirement already satisfied: dask-glm>=0.2.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (0.2.0)\n",
      "Requirement already satisfied: multipledispatch>=0.4.9 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (0.6.0)\n",
      "Requirement already satisfied: scikit-learn>=0.21 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (0.22.1)\n",
      "Requirement already satisfied: dask[array,dataframe]>=2.4.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (2.9.2)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Collecting tensorflow; extra == \"tensorflow\" (from dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/1d/56/0dbdae2a3c527a119bec0d5cf441655fe030ce1daa6fa6b9542f7dbd8664/tensorflow-2.1.0-cp37-cp37m-manylinux2010_x86_64.whl (421.8MB)\n",
      "\u001b[K    100% |████████████████████████████████| 421.8MB 114kB/s ta 0:00:011   19% |██████▏                         | 80.6MB 1.1MB/s eta 0:05:18    49% |████████████████                | 210.2MB 507kB/s eta 0:06:57    54% |█████████████████▎              | 227.9MB 1.2MB/s eta 0:02:44    66% |█████████████████████▍          | 281.7MB 1.4MB/s eta 0:01:44    73% |███████████████████████▊        | 312.1MB 515kB/s eta 0:03:34    98% |███████████████████████████████▍| 414.1MB 583kB/s eta 0:00:14\n",
      "\u001b[?25hCollecting dask-tensorflow; extra == \"tensorflow\" (from dask-ml[tensorflow])\n",
      "  Downloading https://files.pythonhosted.org/packages/00/a5/6cd58713aacf16fc8ef801e3020894a1faba7710c19c047c3e9582081b20/dask_tensorflow-0.0.2-py2.py3-none-any.whl\n",
      "Requirement already satisfied: six in /home/avinash/anaconda3/lib/python3.7/site-packages (from packaging->dask-ml[tensorflow]) (1.12.0)\n",
      "Requirement already satisfied: pyparsing>=2.0.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from packaging->dask-ml[tensorflow]) (2.3.1)\n",
      "Requirement already satisfied: llvmlite>=0.28.0dev0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from numba->dask-ml[tensorflow]) (0.28.0)\n",
      "Requirement already satisfied: psutil>=5.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (5.6.1)\n",
      "Requirement already satisfied: tornado>=5 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (6.0.2)\n",
      "Requirement already satisfied: toolz>=0.7.4 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (0.9.0)\n",
      "Requirement already satisfied: zict>=0.1.3 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (0.1.4)\n",
      "Requirement already satisfied: tblib in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (1.3.2)\n",
      "Requirement already satisfied: setuptools in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (40.8.0)\n",
      "Requirement already satisfied: pyyaml in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (5.1)\n",
      "Requirement already satisfied: cloudpickle>=0.2.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (0.8.0)\n",
      "Requirement already satisfied: click>=6.6 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (7.0)\n",
      "Requirement already satisfied: sortedcontainers!=2.0.0,!=2.0.1 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (2.1.0)\n",
      "Requirement already satisfied: msgpack in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (0.6.1)\n",
      "Requirement already satisfied: python-dateutil>=2.5.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from pandas>=0.23.4->dask-ml[tensorflow]) (2.8.0)\n",
      "Requirement already satisfied: pytz>=2011k in /home/avinash/anaconda3/lib/python3.7/site-packages (from pandas>=0.23.4->dask-ml[tensorflow]) (2018.9)\n",
      "Requirement already satisfied: joblib>=0.11 in /home/avinash/anaconda3/lib/python3.7/site-packages (from scikit-learn>=0.21->dask-ml[tensorflow]) (0.14.1)\n",
      "Requirement already satisfied: partd>=0.3.10; extra == \"dataframe\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask[array,dataframe]>=2.4.0->dask-ml[tensorflow]) (0.3.10)\n",
      "Requirement already satisfied: fsspec>=0.6.0; extra == \"dataframe\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask[array,dataframe]>=2.4.0->dask-ml[tensorflow]) (0.6.2)\n",
      "Collecting tensorboard<2.2.0,>=2.1.0 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/40/23/53ffe290341cd0855d595b0a2e7485932f473798af173bbe3a584b99bb06/tensorboard-2.1.0-py3-none-any.whl (3.8MB)\n",
      "\u001b[K    100% |████████████████████████████████| 3.8MB 984kB/s ta 0:00:01\n",
      "\u001b[?25hCollecting opt-einsum>=2.3.2 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/b8/83/755bd5324777875e9dff19c2e59daec837d0378c09196634524a3d7269ac/opt_einsum-3.1.0.tar.gz (69kB)\n",
      "\u001b[K    100% |████████████████████████████████| 71kB 1.2MB/s ta 0:00:01\n",
      "\u001b[?25hCollecting astor>=0.6.0 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "  Downloading https://files.pythonhosted.org/packages/c3/88/97eef84f48fa04fbd6750e62dcceafba6c63c81b7ac1420856c8dcc0a3f9/astor-0.8.1-py2.py3-none-any.whl\n",
      "Collecting absl-py>=0.7.0 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/1a/53/9243c600e047bd4c3df9e69cfabc1e8004a82cac2e0c484580a78a94ba2a/absl-py-0.9.0.tar.gz (104kB)\n",
      "\u001b[K    100% |████████████████████████████████| 112kB 1.1MB/s ta 0:00:01\n",
      "\u001b[?25hCollecting protobuf>=3.8.0 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/4a/14/f5c294f1e36a031f165128c25feba93b3116f15a74398d0b2747ed75744f/protobuf-3.11.2-cp37-cp37m-manylinux1_x86_64.whl (1.3MB)\n",
      "\u001b[K    100% |████████████████████████████████| 1.3MB 1.4MB/s ta 0:00:01\n",
      "\u001b[?25hCollecting tensorflow-estimator<2.2.0,>=2.1.0rc0 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/18/90/b77c328a1304437ab1310b463e533fa7689f4bfc41549593056d812fab8e/tensorflow_estimator-2.1.0-py2.py3-none-any.whl (448kB)\n",
      "\u001b[K    100% |████████████████████████████████| 450kB 1.1MB/s ta 0:00:01\n",
      "\u001b[?25hCollecting google-pasta>=0.1.6 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/c3/fd/1e86bc4837cc9a3a5faf3db9b1854aa04ad35b5f381f9648fbe81a6f94e4/google_pasta-0.1.8-py3-none-any.whl (57kB)\n",
      "\u001b[K    100% |████████████████████████████████| 61kB 997kB/s ta 0:00:01\n",
      "\u001b[?25hCollecting keras-preprocessing>=1.1.0 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/28/6a/8c1f62c37212d9fc441a7e26736df51ce6f0e38455816445471f10da4f0a/Keras_Preprocessing-1.1.0-py2.py3-none-any.whl (41kB)\n",
      "\u001b[K    100% |████████████████████████████████| 51kB 1.2MB/s ta 0:00:01\n",
      "\u001b[?25hCollecting termcolor>=1.1.0 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "  Downloading https://files.pythonhosted.org/packages/8a/48/a76be51647d0eb9f10e2a4511bf3ffb8cc1e6b14e9e4fab46173aa79f981/termcolor-1.1.0.tar.gz\n",
      "Requirement already satisfied: wrapt>=1.11.1 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow]) (1.11.1)\n",
      "Collecting gast==0.2.2 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "  Downloading https://files.pythonhosted.org/packages/4e/35/11749bf99b2d4e3cceb4d55ca22590b0d7c2c62b9de38ac4a4a7f4687421/gast-0.2.2.tar.gz\n",
      "Collecting grpcio>=1.8.6 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/bc/b3/0052e38c640d52b710e235b15821cc3c61d0065bf54e70a44550ef127349/grpcio-1.26.0-cp37-cp37m-manylinux2010_x86_64.whl (2.4MB)\n",
      "\u001b[K    100% |████████████████████████████████| 2.4MB 1.3MB/s ta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: wheel>=0.26; python_version >= \"3\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow]) (0.33.1)\n",
      "Collecting keras-applications>=1.0.8 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/71/e3/19762fdfc62877ae9102edf6342d71b28fbfd9dea3d2f96a882ce099b03f/Keras_Applications-1.0.8-py3-none-any.whl (50kB)\n",
      "\u001b[K    100% |████████████████████████████████| 51kB 510kB/s ta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: heapdict in /home/avinash/anaconda3/lib/python3.7/site-packages (from zict>=0.1.3->distributed>=2.4.0->dask-ml[tensorflow]) (1.0.0)\n",
      "Requirement already satisfied: locket in /home/avinash/anaconda3/lib/python3.7/site-packages (from partd>=0.3.10; extra == \"dataframe\"->dask[array,dataframe]>=2.4.0->dask-ml[tensorflow]) (0.2.0)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Collecting markdown>=2.6.8 (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/c0/4e/fd492e91abdc2d2fcb70ef453064d980688762079397f779758e055f6575/Markdown-3.1.1-py2.py3-none-any.whl (87kB)\n",
      "\u001b[K    100% |████████████████████████████████| 92kB 1.8MB/s ta 0:00:01\n",
      "\u001b[?25hCollecting google-auth-oauthlib<0.5,>=0.4.1 (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "  Downloading https://files.pythonhosted.org/packages/7b/b8/88def36e74bee9fce511c9519571f4e485e890093ab7442284f4ffaef60b/google_auth_oauthlib-0.4.1-py2.py3-none-any.whl\n",
      "Requirement already satisfied: requests<3,>=2.21.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow]) (2.21.0)\n",
      "Requirement already satisfied: werkzeug>=0.11.15 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow]) (0.14.1)\n",
      "Collecting google-auth<2,>=1.6.3 (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/1c/6d/7aae38a9022f982cf8167775c7fc299f203417b698c27080ce09060bba07/google_auth-1.11.0-py2.py3-none-any.whl (76kB)\n",
      "\u001b[K    100% |████████████████████████████████| 81kB 1.5MB/s ta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: h5py in /home/avinash/anaconda3/lib/python3.7/site-packages (from keras-applications>=1.0.8->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow]) (2.9.0)\n",
      "Collecting requests-oauthlib>=0.7.0 (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "  Downloading https://files.pythonhosted.org/packages/a3/12/b92740d845ab62ea4edf04d2f4164d82532b5a0b03836d4d4e71c6f3d379/requests_oauthlib-1.3.0-py2.py3-none-any.whl\n",
      "Requirement already satisfied: urllib3<1.25,>=1.21.1 in /home/avinash/anaconda3/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow]) (1.24.1)\n",
      "Requirement already satisfied: idna<2.9,>=2.5 in /home/avinash/anaconda3/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow]) (2.8)\n",
      "Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow]) (3.0.4)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in /home/avinash/anaconda3/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow]) (2019.11.28)\n",
      "Collecting cachetools<5.0,>=2.0.0 (from google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "  Downloading https://files.pythonhosted.org/packages/08/6a/abf83cb951617793fd49c98cb9456860f5df66ff89883c8660aa0672d425/cachetools-4.0.0-py3-none-any.whl\n",
      "Collecting rsa<4.1,>=3.1.4 (from google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "  Downloading https://files.pythonhosted.org/packages/02/e5/38518af393f7c214357079ce67a317307936896e961e35450b70fad2a9cf/rsa-4.0-py2.py3-none-any.whl\n",
      "Collecting pyasn1-modules>=0.2.1 (from google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/95/de/214830a981892a3e286c3794f41ae67a4495df1108c3da8a9f62159b9a9d/pyasn1_modules-0.2.8-py2.py3-none-any.whl (155kB)\n",
      "\u001b[K    100% |████████████████████████████████| 163kB 1.1MB/s ta 0:00:01\n",
      "\u001b[?25hCollecting oauthlib>=3.0.0 (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/05/57/ce2e7a8fa7c0afb54a0581b14a65b56e62b5759dbc98e80627142b8a3704/oauthlib-3.1.0-py2.py3-none-any.whl (147kB)\n",
      "\u001b[K    100% |████████████████████████████████| 153kB 1.6MB/s ta 0:00:01\n",
      "\u001b[?25hCollecting pyasn1>=0.1.3 (from rsa<4.1,>=3.1.4->google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/62/1e/a94a8d635fa3ce4cfc7f506003548d0a2447ae76fd5ca53932970fe3053f/pyasn1-0.4.8-py2.py3-none-any.whl (77kB)\n",
      "\u001b[K    100% |████████████████████████████████| 81kB 1.5MB/s ta 0:00:01\n",
      "\u001b[?25hBuilding wheels for collected packages: opt-einsum, absl-py, termcolor, gast\n",
      "  Building wheel for opt-einsum (setup.py) ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /home/avinash/.cache/pip/wheels/2c/b1/94/43d03e130b929aae7ba3f8d15cbd7bc0d1cb5bb38a5c721833\n",
      "  Building wheel for absl-py (setup.py) ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /home/avinash/.cache/pip/wheels/8e/28/49/fad4e7f0b9a1227708cbbee4487ac8558a7334849cb81c813d\n",
      "  Building wheel for termcolor (setup.py) ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /home/avinash/.cache/pip/wheels/7c/06/54/bc84598ba1daf8f970247f550b175aaaee85f68b4b0c5ab2c6\n",
      "  Building wheel for gast (setup.py) ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /home/avinash/.cache/pip/wheels/5c/2e/7e/a1d4d4fcebe6c381f378ce7743a3ced3699feb89bcfbdadadd\n",
      "Successfully built opt-einsum absl-py termcolor gast\n",
      "\u001b[31mtensorboard 2.1.0 has requirement setuptools>=41.0.0, but you'll have setuptools 40.8.0 which is incompatible.\u001b[0m\n",
      "\u001b[31mtensorflow 2.1.0 has requirement scipy==1.4.1; python_version >= \"3\", but you'll have scipy 1.2.1 which is incompatible.\u001b[0m\n",
      "Installing collected packages: grpcio, markdown, oauthlib, requests-oauthlib, cachetools, pyasn1, rsa, pyasn1-modules, google-auth, google-auth-oauthlib, absl-py, protobuf, tensorboard, opt-einsum, astor, tensorflow-estimator, google-pasta, keras-preprocessing, termcolor, gast, keras-applications, tensorflow, dask-tensorflow\n",
      "Successfully installed absl-py-0.9.0 astor-0.8.1 cachetools-4.0.0 dask-tensorflow-0.0.2 gast-0.2.2 google-auth-1.11.0 google-auth-oauthlib-0.4.1 google-pasta-0.1.8 grpcio-1.26.0 keras-applications-1.0.8 keras-preprocessing-1.1.0 markdown-3.1.1 oauthlib-3.1.0 opt-einsum-3.1.0 protobuf-3.11.2 pyasn1-0.4.8 pyasn1-modules-0.2.8 requests-oauthlib-1.3.0 rsa-4.0 tensorboard-2.1.0 tensorflow-2.1.0 tensorflow-estimator-2.1.0 termcolor-1.1.0\n",
      "Requirement already satisfied: dask-ml[complete] in /home/avinash/anaconda3/lib/python3.7/site-packages (1.2.0)\n",
      "Requirement already satisfied: scipy in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (1.2.1)\n",
      "Requirement already satisfied: multipledispatch>=0.4.9 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (0.6.0)\n",
      "Requirement already satisfied: scikit-learn>=0.21 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (0.22.1)\n",
      "Requirement already satisfied: packaging in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (19.0)\n",
      "Requirement already satisfied: numba in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (0.43.1)\n",
      "Requirement already satisfied: dask[array,dataframe]>=2.4.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (2.9.2)\n",
      "Requirement already satisfied: distributed>=2.4.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (2.9.3)\n",
      "Requirement already satisfied: numpy>=1.17.3 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (1.18.1)\n",
      "Requirement already satisfied: dask-glm>=0.2.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (0.2.0)\n",
      "Requirement already satisfied: pandas>=0.23.4 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (0.24.2)\n",
      "Requirement already satisfied: dask-xgboost; extra == \"complete\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (0.1.9)\n",
      "Requirement already satisfied: dask-tensorflow; extra == \"complete\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (0.0.2)\n",
      "Requirement already satisfied: xgboost; extra == \"complete\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (0.90)\n",
      "Requirement already satisfied: tensorflow; extra == \"complete\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (2.1.0)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: six in /home/avinash/anaconda3/lib/python3.7/site-packages (from multipledispatch>=0.4.9->dask-ml[complete]) (1.12.0)\n",
      "Requirement already satisfied: joblib>=0.11 in /home/avinash/anaconda3/lib/python3.7/site-packages (from scikit-learn>=0.21->dask-ml[complete]) (0.14.1)\n",
      "Requirement already satisfied: pyparsing>=2.0.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from packaging->dask-ml[complete]) (2.3.1)\n",
      "Requirement already satisfied: llvmlite>=0.28.0dev0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from numba->dask-ml[complete]) (0.28.0)\n",
      "Requirement already satisfied: toolz>=0.7.3; extra == \"array\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask[array,dataframe]>=2.4.0->dask-ml[complete]) (0.9.0)\n",
      "Requirement already satisfied: partd>=0.3.10; extra == \"dataframe\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask[array,dataframe]>=2.4.0->dask-ml[complete]) (0.3.10)\n",
      "Requirement already satisfied: fsspec>=0.6.0; extra == \"dataframe\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask[array,dataframe]>=2.4.0->dask-ml[complete]) (0.6.2)\n",
      "Requirement already satisfied: zict>=0.1.3 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (0.1.4)\n",
      "Requirement already satisfied: click>=6.6 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (7.0)\n",
      "Requirement already satisfied: msgpack in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (0.6.1)\n",
      "Requirement already satisfied: tornado>=5 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (6.0.2)\n",
      "Requirement already satisfied: psutil>=5.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (5.6.1)\n",
      "Requirement already satisfied: pyyaml in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (5.1)\n",
      "Requirement already satisfied: tblib in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (1.3.2)\n",
      "Requirement already satisfied: cloudpickle>=0.2.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (0.8.0)\n",
      "Requirement already satisfied: sortedcontainers!=2.0.0,!=2.0.1 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (2.1.0)\n",
      "Requirement already satisfied: setuptools in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (40.8.0)\n",
      "Requirement already satisfied: python-dateutil>=2.5.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from pandas>=0.23.4->dask-ml[complete]) (2.8.0)\n",
      "Requirement already satisfied: pytz>=2011k in /home/avinash/anaconda3/lib/python3.7/site-packages (from pandas>=0.23.4->dask-ml[complete]) (2018.9)\n",
      "Requirement already satisfied: termcolor>=1.1.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (1.1.0)\n",
      "Requirement already satisfied: google-pasta>=0.1.6 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (0.1.8)\n",
      "Requirement already satisfied: keras-applications>=1.0.8 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (1.0.8)\n",
      "Requirement already satisfied: absl-py>=0.7.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (0.9.0)\n",
      "Requirement already satisfied: wheel>=0.26; python_version >= \"3\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (0.33.1)\n",
      "Requirement already satisfied: wrapt>=1.11.1 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (1.11.1)\n",
      "Requirement already satisfied: opt-einsum>=2.3.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (3.1.0)\n",
      "Requirement already satisfied: tensorflow-estimator<2.2.0,>=2.1.0rc0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (2.1.0)\n",
      "Requirement already satisfied: gast==0.2.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (0.2.2)\n",
      "Requirement already satisfied: astor>=0.6.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (0.8.1)\n",
      "Requirement already satisfied: protobuf>=3.8.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (3.11.2)\n",
      "Requirement already satisfied: grpcio>=1.8.6 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (1.26.0)\n",
      "Requirement already satisfied: keras-preprocessing>=1.1.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (1.1.0)\n",
      "Requirement already satisfied: tensorboard<2.2.0,>=2.1.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (2.1.0)\n",
      "Requirement already satisfied: locket in /home/avinash/anaconda3/lib/python3.7/site-packages (from partd>=0.3.10; extra == \"dataframe\"->dask[array,dataframe]>=2.4.0->dask-ml[complete]) (0.2.0)\n",
      "Requirement already satisfied: heapdict in /home/avinash/anaconda3/lib/python3.7/site-packages (from zict>=0.1.3->distributed>=2.4.0->dask-ml[complete]) (1.0.0)\n",
      "Requirement already satisfied: h5py in /home/avinash/anaconda3/lib/python3.7/site-packages (from keras-applications>=1.0.8->tensorflow; extra == \"complete\"->dask-ml[complete]) (2.9.0)\n",
      "Requirement already satisfied: markdown>=2.6.8 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (3.1.1)\n",
      "Requirement already satisfied: google-auth<2,>=1.6.3 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (1.11.0)\n",
      "Requirement already satisfied: requests<3,>=2.21.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (2.21.0)\n",
      "Requirement already satisfied: werkzeug>=0.11.15 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (0.14.1)\n",
      "Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (0.4.1)\n",
      "Requirement already satisfied: pyasn1-modules>=0.2.1 in /home/avinash/anaconda3/lib/python3.7/site-packages (from google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (0.2.8)\n",
      "Requirement already satisfied: cachetools<5.0,>=2.0.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (4.0.0)\n",
      "Requirement already satisfied: rsa<4.1,>=3.1.4 in /home/avinash/anaconda3/lib/python3.7/site-packages (from google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (4.0)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in /home/avinash/anaconda3/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (2019.11.28)\n",
      "Requirement already satisfied: urllib3<1.25,>=1.21.1 in /home/avinash/anaconda3/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (1.24.1)\n",
      "Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (3.0.4)\n",
      "Requirement already satisfied: idna<2.9,>=2.5 in /home/avinash/anaconda3/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (2.8)\n",
      "Requirement already satisfied: requests-oauthlib>=0.7.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (1.3.0)\n",
      "Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /home/avinash/anaconda3/lib/python3.7/site-packages (from pyasn1-modules>=0.2.1->google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (0.4.8)\n",
      "Requirement already satisfied: oauthlib>=3.0.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (3.1.0)\n"
     ]
    }
   ],
   "source": [
    "!pip install dask-ml[xgboost] \n",
    "!pip install dask-ml[tensorflow]\n",
    "!pip install dask-ml[complete]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Dask Array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:31:21.495120Z",
     "start_time": "2021-01-04T09:31:20.419988Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,\n",
       "       17])"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# import Dask Array\n",
    "import dask.array as da    \n",
    "\n",
    "# Create Dask Array using arange() function and generate values from 0 to 17\n",
    "a = da.arange(18, chunks=4)\n",
    "\n",
    "# Compute the array\n",
    "a.compute() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:31:21.508258Z",
     "start_time": "2021-01-04T09:31:21.504872Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((4, 4, 4, 4, 2),)"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Check the chunk size\n",
    "a.chunks"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "1e2-Sbo6awGA"
   },
   "source": [
    "## Dask DataFrames"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:31:29.917747Z",
     "start_time": "2021-01-04T09:31:29.711166Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 11 ms, sys: 0 ns, total: 11 ms\n",
      "Wall time: 42.5 ms\n"
     ]
    }
   ],
   "source": [
    "# Read csv file using  pandas\n",
    "import pandas as pd\n",
    "%time temp = pd.read_csv(\"HR_comma_sep.csv\") "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:31:31.555533Z",
     "start_time": "2021-01-04T09:31:30.166667Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 18 ms, sys: 0 ns, total: 18 ms\n",
      "Wall time: 18 ms\n"
     ]
    }
   ],
   "source": [
    "# Read csv file using Dask\n",
    "import dask.dataframe as dd\n",
    "%time df = dd.read_csv(\"HR_comma_sep.csv\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### DataFrame Indexing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:31:32.612501Z",
     "start_time": "2021-01-04T09:31:32.466780Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/avinash/anaconda3/lib/python3.8/site-packages/dask/dataframe/core.py:6178: UserWarning: Insufficient elements for `head`. 5 elements requested, only 3 elements available. Try passing larger `npartitions` to `head`.\n",
      "  warnings.warn(msg.format(n, len(r)))\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>P</th>\n",
       "      <th>Q</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>p</th>\n",
       "      <td>10</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>q</th>\n",
       "      <td>20</td>\n",
       "      <td>50</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>r</th>\n",
       "      <td>30</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    P   Q\n",
       "p  10  40\n",
       "q  20  50\n",
       "r  30  60"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import Dask and Pandas DataFrame\n",
    "import dask.dataframe as dd\n",
    "import pandas as pd\n",
    "\n",
    "# Create Pandas DataFrame\n",
    "df = pd.DataFrame({\"P\": [10, 20, 30], \"Q\": [40, 50, 60]},\n",
    "                  index=['p', 'q', 'r'])\n",
    "\n",
    "# Create Dask DataFrame\n",
    "ddf = dd.from_pandas(df, npartitions=2)\n",
    "\n",
    "# Check top records\n",
    "ddf.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:31:33.965412Z",
     "start_time": "2021-01-04T09:31:33.958079Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Dask Series Structure:\n",
       "npartitions=1\n",
       "p    int64\n",
       "r      ...\n",
       "Name: P, dtype: int64\n",
       "Dask Name: getitem, 2 tasks"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Single Column Selection\n",
    "ddf['P']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:31:35.416554Z",
     "start_time": "2021-01-04T09:31:35.402845Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div><strong>Dask DataFrame Structure:</strong></div>\n",
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Q</th>\n",
       "      <th>P</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>npartitions=1</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>p</th>\n",
       "      <td>int64</td>\n",
       "      <td>int64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>r</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>\n",
       "<div>Dask Name: getitem, 2 tasks</div>"
      ],
      "text/plain": [
       "Dask DataFrame Structure:\n",
       "                   Q      P\n",
       "npartitions=1              \n",
       "p              int64  int64\n",
       "r                ...    ...\n",
       "Dask Name: getitem, 2 tasks"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Multiple Column Selection\n",
    "ddf[['Q', 'P']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:31:36.619692Z",
     "start_time": "2021-01-04T09:31:36.606919Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/avinash/anaconda3/lib/python3.8/site-packages/dask/dataframe/core.py:6178: UserWarning: Insufficient elements for `head`. 5 elements requested, only 3 elements available. Try passing larger `npartitions` to `head`.\n",
      "  warnings.warn(msg.format(n, len(r)))\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>X</th>\n",
       "      <th>Y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>11</td>\n",
       "      <td>41</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>12</td>\n",
       "      <td>51</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>13</td>\n",
       "      <td>61</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    X   Y\n",
       "0  11  41\n",
       "1  12  51\n",
       "2  13  61"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import Dask and Pandas DataFrame\n",
    "import dask.dataframe as dd\n",
    "import pandas as pd\n",
    "\n",
    "# Create Pandas DataFrame\n",
    "df = pd.DataFrame({\"X\": [11, 12, 13], \"Y\": [41, 51, 61]})\n",
    "\n",
    "# Create Dask DataFrame\n",
    "ddf = dd.from_pandas(df, npartitions=2)\n",
    "\n",
    "# Check top records\n",
    "ddf.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:31:37.394726Z",
     "start_time": "2021-01-04T09:31:37.376437Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Y</th>\n",
       "      <th>X</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>41</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>51</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>61</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Y   X\n",
       "0  41  11\n",
       "1  51  12\n",
       "2  61  13"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ddf.iloc[:, [1, 0]].compute()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:31:38.356028Z",
     "start_time": "2021-01-04T09:31:38.100397Z"
    }
   },
   "outputs": [
    {
     "ename": "NotImplementedError",
     "evalue": "'DataFrame.iloc' only supports selecting columns. It must be used like 'df.iloc[:, column_indexer]'.",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNotImplementedError\u001b[0m                       Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-10-eddd43b5f4d8>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mddf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m~/anaconda3/lib/python3.8/site-packages/dask/dataframe/indexing.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m     57\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     58\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0miindexer\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mslice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 59\u001b[0;31m             \u001b[0;32mraise\u001b[0m \u001b[0mNotImplementedError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     60\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     61\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_unique\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNotImplementedError\u001b[0m: 'DataFrame.iloc' only supports selecting columns. It must be used like 'df.iloc[:, column_indexer]'."
     ]
    }
   ],
   "source": [
    "ddf.iloc[0:4, [1, 0]].compute()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Filter data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:39:37.656091Z",
     "start_time": "2021-01-04T09:39:37.620022Z"
    },
    "colab": {},
    "colab_type": "code",
    "id": "by3FWbKgawGY",
    "outputId": "e5650894-cd34-41cb-dbce-3959c1d763ff"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>satisfaction_level</th>\n",
       "      <th>last_evaluation</th>\n",
       "      <th>number_project</th>\n",
       "      <th>average_montly_hours</th>\n",
       "      <th>time_spend_company</th>\n",
       "      <th>Work_accident</th>\n",
       "      <th>left</th>\n",
       "      <th>promotion_last_5years</th>\n",
       "      <th>Departments</th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.38</td>\n",
       "      <td>0.53</td>\n",
       "      <td>2</td>\n",
       "      <td>157</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.80</td>\n",
       "      <td>0.86</td>\n",
       "      <td>5</td>\n",
       "      <td>262</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.11</td>\n",
       "      <td>0.88</td>\n",
       "      <td>7</td>\n",
       "      <td>272</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.72</td>\n",
       "      <td>0.87</td>\n",
       "      <td>5</td>\n",
       "      <td>223</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.37</td>\n",
       "      <td>0.52</td>\n",
       "      <td>2</td>\n",
       "      <td>159</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   satisfaction_level  last_evaluation  number_project  average_montly_hours  \\\n",
       "0                0.38             0.53               2                   157   \n",
       "1                0.80             0.86               5                   262   \n",
       "2                0.11             0.88               7                   272   \n",
       "3                0.72             0.87               5                   223   \n",
       "4                0.37             0.52               2                   159   \n",
       "\n",
       "   time_spend_company  Work_accident  left  promotion_last_5years  \\\n",
       "0                   3              0     1                      0   \n",
       "1                   6              0     1                      0   \n",
       "2                   4              0     1                      0   \n",
       "3                   5              0     1                      0   \n",
       "4                   3              0     1                      0   \n",
       "\n",
       "  Departments   salary  \n",
       "0        sales     low  \n",
       "1        sales  medium  \n",
       "2        sales  medium  \n",
       "3        sales     low  \n",
       "4        sales     low  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import Dask DataFrame\n",
    "import dask.dataframe as dd\n",
    "\n",
    "# Read CSV file\n",
    "ddf = dd.read_csv('HR_comma_sep.csv')\n",
    "\n",
    "# See top 5 records\n",
    "ddf.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:39:38.340577Z",
     "start_time": "2021-01-04T09:39:38.295086Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>satisfaction_level</th>\n",
       "      <th>last_evaluation</th>\n",
       "      <th>number_project</th>\n",
       "      <th>average_montly_hours</th>\n",
       "      <th>time_spend_company</th>\n",
       "      <th>Work_accident</th>\n",
       "      <th>left</th>\n",
       "      <th>promotion_last_5years</th>\n",
       "      <th>Departments</th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.38</td>\n",
       "      <td>0.53</td>\n",
       "      <td>2</td>\n",
       "      <td>157</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.72</td>\n",
       "      <td>0.87</td>\n",
       "      <td>5</td>\n",
       "      <td>223</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.37</td>\n",
       "      <td>0.52</td>\n",
       "      <td>2</td>\n",
       "      <td>159</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.41</td>\n",
       "      <td>0.50</td>\n",
       "      <td>2</td>\n",
       "      <td>153</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.10</td>\n",
       "      <td>0.77</td>\n",
       "      <td>6</td>\n",
       "      <td>247</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   satisfaction_level  last_evaluation  number_project  average_montly_hours  \\\n",
       "0                0.38             0.53               2                   157   \n",
       "3                0.72             0.87               5                   223   \n",
       "4                0.37             0.52               2                   159   \n",
       "5                0.41             0.50               2                   153   \n",
       "6                0.10             0.77               6                   247   \n",
       "\n",
       "   time_spend_company  Work_accident  left  promotion_last_5years  \\\n",
       "0                   3              0     1                      0   \n",
       "3                   5              0     1                      0   \n",
       "4                   3              0     1                      0   \n",
       "5                   3              0     1                      0   \n",
       "6                   4              0     1                      0   \n",
       "\n",
       "  Departments  salary  \n",
       "0        sales    low  \n",
       "3        sales    low  \n",
       "4        sales    low  \n",
       "5        sales    low  \n",
       "6        sales    low  "
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Filter employee with low salary\n",
    "ddf2 = ddf[ddf.salary == 'low']\n",
    "ddf2.compute().head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:39:39.659896Z",
     "start_time": "2021-01-04T09:39:39.593007Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>satisfaction_level</th>\n",
       "      <th>last_evaluation</th>\n",
       "      <th>number_project</th>\n",
       "      <th>average_montly_hours</th>\n",
       "      <th>time_spend_company</th>\n",
       "      <th>Work_accident</th>\n",
       "      <th>promotion_last_5years</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>left</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.666810</td>\n",
       "      <td>0.715473</td>\n",
       "      <td>3.786664</td>\n",
       "      <td>199.060203</td>\n",
       "      <td>3.380032</td>\n",
       "      <td>0.175009</td>\n",
       "      <td>0.026251</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.440098</td>\n",
       "      <td>0.718113</td>\n",
       "      <td>3.855503</td>\n",
       "      <td>207.419210</td>\n",
       "      <td>3.876505</td>\n",
       "      <td>0.047326</td>\n",
       "      <td>0.005321</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      satisfaction_level  last_evaluation  number_project  \\\n",
       "left                                                        \n",
       "0               0.666810         0.715473        3.786664   \n",
       "1               0.440098         0.718113        3.855503   \n",
       "\n",
       "      average_montly_hours  time_spend_company  Work_accident  \\\n",
       "left                                                            \n",
       "0               199.060203            3.380032       0.175009   \n",
       "1               207.419210            3.876505       0.047326   \n",
       "\n",
       "      promotion_last_5years  \n",
       "left                         \n",
       "0                  0.026251  \n",
       "1                  0.005321  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Find average values of all the columns for employee left or stayed \n",
    "ddf.groupby('left').mean().compute()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Dask Bags"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Creating Dask bag using Python Iterable items"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:39:43.453324Z",
     "start_time": "2021-01-04T09:39:41.300774Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1, 2)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import dask bag\n",
    "import dask.bag as db\n",
    "\n",
    "# Create a bag of list items\n",
    "items_bag = db.from_sequence([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], npartitions=3)\n",
    "\n",
    "# Take initial two items\n",
    "items_bag.take(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:39:44.033587Z",
     "start_time": "2021-01-04T09:39:43.545197Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 3, 5, 7, 9]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Filter the bag of list items\n",
    "items_square=items_bag.filter(lambda x: x if x % 2 != 0 else None)\n",
    "\n",
    "# Compute the results\n",
    "items_square.compute()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:39:56.425474Z",
     "start_time": "2021-01-04T09:39:55.995210Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Square the bag of list items\n",
    "items_square=items_bag.map(lambda x: x**2)\n",
    "\n",
    "# Compute the results\n",
    "items_square.compute()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Creating Dask Bag using text file"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:40:50.761736Z",
     "start_time": "2021-01-04T09:40:50.327992Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "('Hi! how are you? \\n', '\\n')"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import dask bag\n",
    "import dask.bag as db\n",
    "\n",
    "# Create a bag of text file\n",
    "text = db.read_text('sample.txt')\n",
    "\n",
    "# Show initial 1 items from text\n",
    "text.take(2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Storing Dask Bag into text file"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:40:52.073537Z",
     "start_time": "2021-01-04T09:40:51.649185Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['/home/avinash/Documents/notebooks/Python-Data-Analysis-Third-Edition/Ch14/0.txt.gz']"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Convert dask bag object into text file\n",
    "text.to_textfiles('*.txt.gz')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Storing Dask Bag into DataFrame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:40:53.659083Z",
     "start_time": "2021-01-04T09:40:53.255550Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>item_name</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Egg</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Bread</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Milk</td>\n",
       "      <td>54</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  item_name  price\n",
       "0       Egg      5\n",
       "1     Bread     20\n",
       "0      Milk     54"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import dask bag\n",
    "import dask.bag as db\n",
    "\n",
    "# Create a bag of dictionary items\n",
    "dict_bag = db.from_sequence([{'item_name': 'Egg', 'price': 5},\n",
    "                      {'item_name': 'Bread', 'price': 20},\n",
    "                      {'item_name': 'Milk', 'price': 54}],\n",
    "                      npartitions=2)\n",
    "\n",
    "# Convert bag object into dataframe\n",
    "df = dict_bag.to_dataframe()\n",
    "\n",
    "# Execute the graph results\n",
    "df.compute()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Dask Delayed"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:45:16.915086Z",
     "start_time": "2021-01-04T09:45:16.897405Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "33.0"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import dask delayed and compute\n",
    "from dask import delayed, compute\n",
    "\n",
    "# Create delayed function\n",
    "@delayed\n",
    "def cube(item):\n",
    "    return item ** 3\n",
    "\n",
    "# Create delayed function\n",
    "@delayed\n",
    "def average(items):\n",
    "    return sum(items)/len(items)\n",
    "\n",
    "# create a list\n",
    "item_list = [2, 3, 4]\n",
    "\n",
    "# Compute cube of given item list\n",
    "cube_list= [cube(i) for i in item_list]\n",
    "\n",
    "# Compute average of cube_list\n",
    "computation_graph = average(cube_list)\n",
    "\n",
    "# Compute the results\n",
    "computation_graph.compute()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:45:22.011741Z",
     "start_time": "2021-01-04T09:45:21.523987Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Visualize the graph\n",
    "computation_graph.visualize()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Preprocessing"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Feature Scaling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:45:32.586741Z",
     "start_time": "2021-01-04T09:45:32.541362Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>satisfaction_level</th>\n",
       "      <th>last_evaluation</th>\n",
       "      <th>number_project</th>\n",
       "      <th>average_montly_hours</th>\n",
       "      <th>time_spend_company</th>\n",
       "      <th>Work_accident</th>\n",
       "      <th>left</th>\n",
       "      <th>promotion_last_5years</th>\n",
       "      <th>Departments</th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.38</td>\n",
       "      <td>0.53</td>\n",
       "      <td>2</td>\n",
       "      <td>157</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.80</td>\n",
       "      <td>0.86</td>\n",
       "      <td>5</td>\n",
       "      <td>262</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.11</td>\n",
       "      <td>0.88</td>\n",
       "      <td>7</td>\n",
       "      <td>272</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.72</td>\n",
       "      <td>0.87</td>\n",
       "      <td>5</td>\n",
       "      <td>223</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.37</td>\n",
       "      <td>0.52</td>\n",
       "      <td>2</td>\n",
       "      <td>159</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   satisfaction_level  last_evaluation  number_project  average_montly_hours  \\\n",
       "0                0.38             0.53               2                   157   \n",
       "1                0.80             0.86               5                   262   \n",
       "2                0.11             0.88               7                   272   \n",
       "3                0.72             0.87               5                   223   \n",
       "4                0.37             0.52               2                   159   \n",
       "\n",
       "   time_spend_company  Work_accident  left  promotion_last_5years  \\\n",
       "0                   3              0     1                      0   \n",
       "1                   6              0     1                      0   \n",
       "2                   4              0     1                      0   \n",
       "3                   5              0     1                      0   \n",
       "4                   3              0     1                      0   \n",
       "\n",
       "  Departments   salary  \n",
       "0        sales     low  \n",
       "1        sales  medium  \n",
       "2        sales  medium  \n",
       "3        sales     low  \n",
       "4        sales     low  "
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import Dask DataFrame\n",
    "import dask.dataframe as dd\n",
    "\n",
    "# Read CSV file\n",
    "ddf = dd.read_csv('HR_comma_sep.csv')\n",
    "\n",
    "# See top 5 records\n",
    "ddf.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:45:35.492449Z",
     "start_time": "2021-01-04T09:45:33.365668Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[26.5625],\n",
       "       [78.125 ],\n",
       "       [81.25  ],\n",
       "       ...,\n",
       "       [26.5625],\n",
       "       [93.75  ],\n",
       "       [25.    ]])"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import MinMaxScaler\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "# Instantiate the MinMaxScaler Object\n",
    "scaler = MinMaxScaler(feature_range=(0, 100))\n",
    "\n",
    "# Fit the data on Scaler\n",
    "scaler.fit(ddf[['last_evaluation']])\n",
    "\n",
    "# Transform the data\n",
    "performance_score=scaler.transform(ddf[['last_evaluation']])\n",
    "\n",
    "# Let's see the scaled performance score\n",
    "performance_score"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Feature Encoding"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:45:35.525913Z",
     "start_time": "2021-01-04T09:45:34.636Z"
    }
   },
   "outputs": [],
   "source": [
    "# Import Dask DataFrame\n",
    "import dask.dataframe as dd\n",
    "\n",
    "# Read CSV file\n",
    "ddf = dd.read_csv('HR_comma_sep.csv')\n",
    "\n",
    "# See top 5 records\n",
    "ddf.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:45:35.527877Z",
     "start_time": "2021-01-04T09:45:35.300Z"
    }
   },
   "outputs": [],
   "source": [
    "# Import Onehot Encoder\n",
    "from dask_ml.preprocessing import Categorizer\n",
    "from dask_ml.preprocessing import OneHotEncoder\n",
    "from sklearn.pipeline import make_pipeline\n",
    "\n",
    "# Create pipeline with Categorizer and OneHotEncoder\n",
    "pipe = make_pipeline(\n",
    "    Categorizer(), OneHotEncoder())\n",
    "\n",
    "# Fit and transform the Categorizer and OneHotEncoder\n",
    "pipe.fit(ddf[['salary',]])\n",
    "result=pipe.transform(ddf[['salary',]])\n",
    "\n",
    "# See top 5 records\n",
    "result.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:46:01.945893Z",
     "start_time": "2021-01-04T09:46:00.189286Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   salary\n",
       "0       0\n",
       "1       1\n",
       "2       1\n",
       "3       0\n",
       "4       0"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import Onehot Encoder\n",
    "from dask_ml.preprocessing import Categorizer\n",
    "from dask_ml.preprocessing import OrdinalEncoder\n",
    "from sklearn.pipeline import make_pipeline\n",
    "\n",
    "# Create pipeline with Categorizer and OrdinalEncoder\n",
    "pipe = make_pipeline(\n",
    "    Categorizer(), OrdinalEncoder())\n",
    "\n",
    "# Fit and transform the Categorizer and OneHotEncoder\n",
    "pipe.fit(ddf[['salary',]])\n",
    "result=pipe.transform(ddf[['salary',]])\n",
    "\n",
    "# Let's see encoded results\n",
    "result.head()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Machine Learning"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Parallel Computing using Scikit-learn "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:46:13.121837Z",
     "start_time": "2021-01-04T09:46:13.098271Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>satisfaction_level</th>\n",
       "      <th>last_evaluation</th>\n",
       "      <th>number_project</th>\n",
       "      <th>average_montly_hours</th>\n",
       "      <th>time_spend_company</th>\n",
       "      <th>Work_accident</th>\n",
       "      <th>left</th>\n",
       "      <th>promotion_last_5years</th>\n",
       "      <th>Departments</th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.38</td>\n",
       "      <td>0.53</td>\n",
       "      <td>2</td>\n",
       "      <td>157</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.80</td>\n",
       "      <td>0.86</td>\n",
       "      <td>5</td>\n",
       "      <td>262</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.11</td>\n",
       "      <td>0.88</td>\n",
       "      <td>7</td>\n",
       "      <td>272</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.72</td>\n",
       "      <td>0.87</td>\n",
       "      <td>5</td>\n",
       "      <td>223</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.37</td>\n",
       "      <td>0.52</td>\n",
       "      <td>2</td>\n",
       "      <td>159</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   satisfaction_level  last_evaluation  number_project  average_montly_hours  \\\n",
       "0                0.38             0.53               2                   157   \n",
       "1                0.80             0.86               5                   262   \n",
       "2                0.11             0.88               7                   272   \n",
       "3                0.72             0.87               5                   223   \n",
       "4                0.37             0.52               2                   159   \n",
       "\n",
       "   time_spend_company  Work_accident  left  promotion_last_5years  \\\n",
       "0                   3              0     1                      0   \n",
       "1                   6              0     1                      0   \n",
       "2                   4              0     1                      0   \n",
       "3                   5              0     1                      0   \n",
       "4                   3              0     1                      0   \n",
       "\n",
       "  Departments   salary  \n",
       "0        sales     low  \n",
       "1        sales  medium  \n",
       "2        sales  medium  \n",
       "3        sales     low  \n",
       "4        sales     low  "
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import Dask DataFrame\n",
    "import pandas as pd\n",
    "\n",
    "# Read CSV file\n",
    "df = pd.read_csv('HR_comma_sep.csv')\n",
    "\n",
    "# See top 5 records\n",
    "df.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:46:14.404074Z",
     "start_time": "2021-01-04T09:46:14.395530Z"
    }
   },
   "outputs": [],
   "source": [
    "# select the feature and target columns\n",
    "data=df[['satisfaction_level', 'last_evaluation']]\n",
    "label=df['left']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:46:17.360440Z",
     "start_time": "2021-01-04T09:46:15.057445Z"
    }
   },
   "outputs": [],
   "source": [
    "# Import client\n",
    "from dask.distributed import Client \n",
    "\n",
    "# Instantiate the Client\n",
    "client = Client() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:46:17.520164Z",
     "start_time": "2021-01-04T09:46:15.884Z"
    }
   },
   "outputs": [],
   "source": [
    "# import dask_ml.joblib\n",
    "from sklearn.externals.joblib import parallel_backend\n",
    "\n",
    "with parallel_backend('dask'):\n",
    "    # Write normal scikit-learn code here\n",
    "    from sklearn.ensemble import RandomForestClassifier \n",
    "    from sklearn.metrics import accuracy_score\n",
    "    from sklearn.model_selection import train_test_split\n",
    "    \n",
    "    # Split data into training and testing set\n",
    "    X_train, X_test, y_train, y_test = train_test_split(data, label, \n",
    "                                                    test_size=0.2, \n",
    "                                                    random_state=0)\n",
    "    # Instantiate RandomForest Model\n",
    "    model = RandomForestClassifier()\n",
    "    \n",
    "    # Fit the model\n",
    "    model.fit(X_train,y_train)\n",
    "    \n",
    "    # Predict the classes\n",
    "    y_pred = model.predict(X_test)\n",
    "    \n",
    "    # Find model accuracy\n",
    "    print(\"Accuracy:\",accuracy_score(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Reimplementing ML Algorithms for Dask"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:46:22.043329Z",
     "start_time": "2021-01-04T09:46:20.039801Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>satisfaction_level</th>\n",
       "      <th>last_evaluation</th>\n",
       "      <th>number_project</th>\n",
       "      <th>average_montly_hours</th>\n",
       "      <th>time_spend_company</th>\n",
       "      <th>Work_accident</th>\n",
       "      <th>left</th>\n",
       "      <th>promotion_last_5years</th>\n",
       "      <th>Departments</th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.38</td>\n",
       "      <td>0.53</td>\n",
       "      <td>2</td>\n",
       "      <td>157</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.80</td>\n",
       "      <td>0.86</td>\n",
       "      <td>5</td>\n",
       "      <td>262</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.11</td>\n",
       "      <td>0.88</td>\n",
       "      <td>7</td>\n",
       "      <td>272</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.72</td>\n",
       "      <td>0.87</td>\n",
       "      <td>5</td>\n",
       "      <td>223</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.37</td>\n",
       "      <td>0.52</td>\n",
       "      <td>2</td>\n",
       "      <td>159</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   satisfaction_level  last_evaluation  number_project  average_montly_hours  \\\n",
       "0                0.38             0.53               2                   157   \n",
       "1                0.80             0.86               5                   262   \n",
       "2                0.11             0.88               7                   272   \n",
       "3                0.72             0.87               5                   223   \n",
       "4                0.37             0.52               2                   159   \n",
       "\n",
       "   time_spend_company  Work_accident  left  promotion_last_5years  \\\n",
       "0                   3              0     1                      0   \n",
       "1                   6              0     1                      0   \n",
       "2                   4              0     1                      0   \n",
       "3                   5              0     1                      0   \n",
       "4                   3              0     1                      0   \n",
       "\n",
       "  Departments   salary  \n",
       "0        sales     low  \n",
       "1        sales  medium  \n",
       "2        sales  medium  \n",
       "3        sales     low  \n",
       "4        sales     low  "
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Read CSV file using Dask\n",
    "import dask.dataframe as dd\n",
    "\n",
    "# Read Human Resource Data\n",
    "ddf = dd.read_csv(\"HR_comma_sep.csv\")\n",
    "\n",
    "# Let's see top 5 records\n",
    "ddf.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:46:36.719701Z",
     "start_time": "2021-01-04T09:46:36.482497Z"
    }
   },
   "outputs": [],
   "source": [
    "data=ddf[['satisfaction_level', 'last_evaluation']].to_dask_array(lengths=True)\n",
    "label=ddf['left'].to_dask_array(lengths=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:47:30.312875Z",
     "start_time": "2021-01-04T09:47:30.289108Z"
    }
   },
   "outputs": [],
   "source": [
    "# Import Dask based LogisticRegression \n",
    "from dask_ml.linear_model import LogisticRegression\n",
    "\n",
    "# Import accuracy score metric\n",
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "# Import Dask based train_test_split\n",
    "from dask_ml.model_selection import train_test_split\n",
    "\n",
    "# Divide the data into two parts: training and testing set\n",
    "X_train, X_test, y_train, y_test = train_test_split(data, label)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:47:31.834841Z",
     "start_time": "2021-01-04T09:47:30.676890Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy: 0.7773333333333333\n"
     ]
    }
   ],
   "source": [
    "# Create logistic regression model\n",
    "model = LogisticRegression()\n",
    "\n",
    "# Fit the model\n",
    "model.fit(X_train,y_train)\n",
    "\n",
    "# Predict the classes\n",
    "y_pred = model.predict(X_test)\n",
    "\n",
    "# Find model accuracy\n",
    "print(\"Accuracy:\",accuracy_score(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Clustering"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:48:14.086735Z",
     "start_time": "2021-01-04T09:48:14.021360Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>satisfaction_level</th>\n",
       "      <th>last_evaluation</th>\n",
       "      <th>number_project</th>\n",
       "      <th>average_montly_hours</th>\n",
       "      <th>time_spend_company</th>\n",
       "      <th>Work_accident</th>\n",
       "      <th>left</th>\n",
       "      <th>promotion_last_5years</th>\n",
       "      <th>Departments</th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.38</td>\n",
       "      <td>0.53</td>\n",
       "      <td>2</td>\n",
       "      <td>157</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.80</td>\n",
       "      <td>0.86</td>\n",
       "      <td>5</td>\n",
       "      <td>262</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.11</td>\n",
       "      <td>0.88</td>\n",
       "      <td>7</td>\n",
       "      <td>272</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.72</td>\n",
       "      <td>0.87</td>\n",
       "      <td>5</td>\n",
       "      <td>223</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.37</td>\n",
       "      <td>0.52</td>\n",
       "      <td>2</td>\n",
       "      <td>159</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   satisfaction_level  last_evaluation  number_project  average_montly_hours  \\\n",
       "0                0.38             0.53               2                   157   \n",
       "1                0.80             0.86               5                   262   \n",
       "2                0.11             0.88               7                   272   \n",
       "3                0.72             0.87               5                   223   \n",
       "4                0.37             0.52               2                   159   \n",
       "\n",
       "   time_spend_company  Work_accident  left  promotion_last_5years  \\\n",
       "0                   3              0     1                      0   \n",
       "1                   6              0     1                      0   \n",
       "2                   4              0     1                      0   \n",
       "3                   5              0     1                      0   \n",
       "4                   3              0     1                      0   \n",
       "\n",
       "  Departments   salary  \n",
       "0        sales     low  \n",
       "1        sales  medium  \n",
       "2        sales  medium  \n",
       "3        sales     low  \n",
       "4        sales     low  "
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Read CSV file using Dask\n",
    "import dask.dataframe as dd\n",
    "\n",
    "# Read Human Resource Data\n",
    "ddf = dd.read_csv(\"HR_comma_sep.csv\")\n",
    "\n",
    "# Let's see top 5 records\n",
    "ddf.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:48:15.004120Z",
     "start_time": "2021-01-04T09:48:14.955634Z"
    }
   },
   "outputs": [],
   "source": [
    "data=ddf[['satisfaction_level', 'last_evaluation']].to_dask_array(lengths=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:48:16.801581Z",
     "start_time": "2021-01-04T09:48:15.606226Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 0, 1, ..., 1, 1, 1], dtype=int32)"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import Dask based Kmeans\n",
    "from dask_ml.cluster import KMeans\n",
    "\n",
    "# Create the Kmeans model\n",
    "model=KMeans(n_clusters=3)\n",
    "\n",
    "# Fit the model \n",
    "model.fit(data)\n",
    "\n",
    "# Predict the classes\n",
    "label=model.labels_\n",
    "\n",
    "# Compute the results\n",
    "label.compute()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-01-04T09:48:24.139881Z",
     "start_time": "2021-01-04T09:48:23.677181Z"
    },
    "colab": {},
    "colab_type": "code",
    "id": "dV_zRIElawQg",
    "outputId": "d39cfd0f-c59d-455d-b5c9-151648225d38"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Import matplotlib.pylpot\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Prepare x,y and cluster_labels\n",
    "x=data[:,0].compute()\n",
    "y=data[:,1].compute()\n",
    "cluster_labels=label.compute()\n",
    "\n",
    "# Draw scatter plot\n",
    "plt.scatter(x,y, c=cluster_labels)\n",
    "\n",
    "# Add label on X-axis\n",
    "plt.xlabel('Satisfaction Level')\n",
    "\n",
    "# Add label on X-axis\n",
    "plt.ylabel('Performance Level')\n",
    "\n",
    "# Add a title to the graph\n",
    "plt.title('Groups of employees who left the Company')\n",
    "\n",
    "# Show the plot\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "colab": {
   "collapsed_sections": [],
   "name": "Dask-1.ipynb",
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
